import {
    useCounterStore
} from "../stores/counter.ts"
import axios from "axios"
import router from "../router"
import { showToast,closeToast,showLoadingToast,showFailToast} from 'vant';



// 创建axios实例,将来对创建出来的实例,进行自定义配置
// 好处:不会污染原始的 axios实例
const instance = axios.create({
    baseURL: 'http://localhost:8000/',
    timeout: 5000
})
// 自定义配置 --请求响应拦截器
// 添加请求拦截器
instance.interceptors.request.use(function (config) {
    // 在发送请求之前做些什么
    // 开启loading,禁止背景点击(节流处理,防止多次无效触发)
      showLoadingToast({
        message: '',
        forbidClick: true, // 禁止背景点击
        loadingType: 'spinner', // 配置loading图标
        duration: 0, // 不会自动消失
        iconSize:'25px'
    })
    // 只要有token，就在请求时携带,便于请求需要授权的接口
    const token = useCounterStore().token // getters里的token方法
    if (token) {
        //与后端名一样
        config.headers['app-token'] = token
    }
    return config
}, function (error) {
    // 对请求错误做些什么
    return Promise.reject(error)
})

// 添加响应拦截器
instance.interceptors.response.use(function (response) {
    // 2xx 范围内的状态码都会触发该函数。
    const res = response
    if (res.status !== 200) {
        // 给错误提示，Toast默认是单例子模式,后面的Toast调用了,会将前一个Toast效果覆盖
        // 同时只能存在一个Toast
        showFailToast(res.message)
        // 抛出一个错误promise
        return Promise.reject(res.message)
    } else {
        // 正确情况,直接走业务核心逻辑，清除loading效果
        closeToast(true)
    }
    return res
}, function (error) {
    const res = error.response
    // 超出 2xx 范围的状态码都会触发该函数。
    // 对响应错误做点什么
    console.log(res)
    if (res === undefined) {
        //关闭loading效果
        closeToast(true)
        showFailToast('请求不到服务器')
        return Promise.reject(error)
    }

    if (res.status === 401) {
        //关闭loading效果
        closeToast(true)
        // 清除token
        useCounterStore().clearUserInfo()
        showFailToast('登录已过期,请重新登录')
        // 跳转到登录页
        router.replace({
            path: '/login',
            query: {
                redirect: router.currentRoute.fullPath
            }
        })
        return Promise.reject(error)
    }

    if (res.status !== 200) {
        //关闭loading效果
        closeToast(true)
        showFailToast(res.data.error)
        return Promise.reject(error)
    }

})



// 导出配置好的实例
export default instance